//
//  NSString+RWAdditions.h
//  RWCategory
//
//  Created by Ray on 2021/11/14.
//

#import <UIKit/UIKit.h>

@interface NSString (RWCorrect)

+ (NSString *)rw_nonnullString:(id)sender;

+ (NSString *)rw_safeString:(id)sender;

/// 是否是空的
- (BOOL)rw_isNonEmpty;

/// 删除两端空格
/// @param string  被处理者
+ (NSString *)rw_deleteSpaceAtBothEnds:(NSString *)string;

- (NSString *)rw_deleteSpaceAtBothEnds;

/// 删除所有空格
/// @param sender 被处理者
+ (NSString *)rw_deleteAllSpace:(NSString *)sender;

- (NSString *)rw_deleteAllSpace;

@end

#pragma mark - *****************************************  Format格式  *********************************************

@interface NSString (RWFormatter)
/// 千分位格式 1352258900 --> 1,352,258,900.00
+ (NSString *)rw_currencyFormatWithString:(NSString *)string;

- (NSString *)rw_currencyFormat;

/// 手机号格式 13522589780 --> 135 2258 9780
+ (NSString *)rw_mobileFormatWithString:(NSString *)string;

- (NSString *)rw_mobileFormat;

/// 匹配正则表达式的字符串集合
/// @param regex 正则表达式
- (NSArray *)rw_matchExpression:(NSString *)regex;

/// 是否匹配正则表达式
/// @param regex 正则表达式
- (BOOL)rw_isMatchExpression:(NSString *)regex;

/// 是否是手机号码
- (BOOL)rw_isMobileNumber;

/// 是否是 中国身份证号
- (BOOL)rw_isChinaIdNumber;

/// 是否是中国 车牌号码
- (BOOL)rw_isChinaCarNumber;

/// 是否是密码格式(6~16位数字/字母/下划线)
- (BOOL)rw_isPasswordFormat;

/// 是否都是数字 (这里可是@"0011220")
- (BOOL)rw_isAllNumber;

/// 是否是 正整数(首位必须>=1)
- (BOOL)rw_isPositive;

/// 是否是 负整数
- (BOOL)rw_isNegative;

/// 是否都是英语字符(不区分大小写)
- (BOOL)rw_isEnglishAlphabet;

/// 是否都是字母和数字
- (BOOL)rw_isEnglishAlphabetAndNumber;

/// 是否都是字母和数字且长度在[6,16]
- (BOOL)rw_isEnglishAlphabetAndNumberLimit;

/// 是否都是中国汉字
- (BOOL)rw_isChineseCharacter;

/// 是否包含有汉字
- (BOOL)rw_hasChineseCharacter;

/// 验证邮箱地址
- (BOOL)rw_isEmail;

/// 是否是银行卡号
- (BOOL)rw_isBankCard;

/// 获取拼音首字母(返回大写拼音首字母)
- (NSString *)rw_firstCharactor;

/// 获取字符串的第一个字母(汉字则获取拼音的第一个字母)
/// @param string 被转化字符串
/// @param isLower 是否是小写字母
/// @param defStr 没有匹配到时的默认字符串
+ (NSString *)rw_firstLeter:(NSString *)string lower:(BOOL)isLower defaultString:(NSString *)defStr;
- (NSString *)rw_firstLeterForLower:(BOOL)isLower defaultString:(NSString *)defStr;


/// 格式化字符串, 12345678910--> 123**910
/// @param symbol 中间连接词
/// @param count 连接词长度
/// @param headLength 保留头部长度
/// @param footLength 保留尾部长度
- (NSString *)rw_formatWithJoinString:(NSString *)symbol
                               length:(NSInteger)count
                       keepHeadLength:(NSInteger)headLength
                       keepFootLength:(NSInteger)footLength;

/// 字符串md5
- (NSString *)rw_md5String;

/// JSON字符串转字典
- (NSDictionary *)rw_jsonStringParsingToDictionary;

/// 数据数值转字节字符串  1024 --> 1M
+ (NSString *)rw_byteReadableStringWithSize:(NSInteger)size;

@end

@interface NSString (RWURL)

/// 是否是 http/https的url
- (BOOL)rw_isLinkURl;

/// 提取url中的协议
- (NSString *)rw_extractUrlProtocol;

/// 提取url中的域名
- (NSString *)rw_extractUrlDomain;

/// 提取url中的端口号
- (NSString *)rw_extractUrlPort;

/// 提取url中的参数
- (NSDictionary *)rw_extractUrlQuery;

/// 进行Url转义（将中文及中文字符以及:#[]@除外的符号进行编码）
- (NSString *)rw_legalUrlEscaped;

@end

@interface NSString (RWDateConver)

/// 时间戳字符串--> Formate（eg:YYYY-MM-dd HH:mm:ss）
/// @param format 时间展示的格式
- (NSString *)rw_timeStampToFormat:(NSString *)format;

@end

@interface NSString (RWSubsets)

- (NSString *)rw_subToIndex:(NSUInteger)to;

- (NSString *)rw_subFromIndex:(NSUInteger)from;

- (NSString *)rw_subFrom:(NSUInteger)from to:(NSUInteger)to;

@end

@interface NSString (RWRandom)

/// 小写随机串
/// @param count 位数
+ (NSString *)rw_lowercaseRandomWithCount:(NSInteger)count;

/// 大写随机串
/// @param count 位数
+ (NSString *)rw_uppercaseRandomWithCount:(NSInteger)count;

/// 大小写+数字随机串
/// @param count 位数
+ (NSString *)rw_letterAndNumberRandomWithCount:(NSInteger)count;

@end


@interface NSString (RWSize)

/// 根据文字获取高度
/// @param font 文字大小
/// @param width 最大宽度
- (CGFloat)rw_heightWithFont:(UIFont *)font maxWidth:(CGFloat)width;

/// 根据文字获取宽度
/// @param font 文字大小
/// @param height 最大高度
- (CGFloat)rw_widthWithFont:(UIFont *)font maxHeight:(CGFloat)height;

- (CGSize)rw_sizeWithFont:(UIFont *)font
                 maxWidth:(CGFloat)width
                maxHeight:(CGFloat)height
                lineSpace:(CGFloat)lineSpace;

@end

@interface NSString (RWCompare)

/// 对比版本号（eg. x.x.x）
/// - Parameter version: 要对比的版本号
- (NSComparisonResult)rw_compareVersionByVersion:(NSString *)version;

@end
